package com.school.information.utils;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;

import java.util.concurrent.atomic.AtomicInteger;

public class GenrateCodeUtil {

    private static final AtomicInteger atomicNum = new AtomicInteger();

    /**
     * @param prefix 业务前缀
     * @param len    业务流水号长度
     * @param maxRow 当前业务最大编号
     * @return
     */
    public static String getNewAutoNum(String prefix, int len, String maxRow) {
        int maxVal = 0;
        if (StringUtils.isNotBlank(maxRow)) {
            String[] maxArray = maxRow.split(prefix);
            if (ArrayUtils.isNotEmpty(maxArray) && StringUtils.isNotBlank(maxArray[1])) {
                maxVal = Integer.parseInt(maxArray[1]);
            }
        }
        atomicNum.set(maxVal);
        //线程安全的原子操作，所以此方法无需同步
        int newNum = atomicNum.incrementAndGet();
        //数字长度为3位，长度不够数字前面补0
        String newStrNum = String.format("%0" + len + "d", newNum);
        return prefix + newStrNum;
    }

    /**
     * redis 自增方式实现
     * @param prefix
     * @param len
     * @param maxVal
     * @return
     */
    public static String getNewAutoNum(String prefix, int len, int maxVal) {
        //数字长度为3位，长度不够数字前面补0
        String newStrNum = String.format("%0" + len + "d", maxVal);
        return prefix + newStrNum;
    }
}
